[アップデート] AWS FIS でディスク容量不足を発生させることが出来るようになったので、Amazon Linux 2023 と CloudWatch アラームで構築した簡単な監視・通知が機能しているか確認してみました
いわさです。
AWS Fault Injection Simulator (FIS) を使うことで、AWS 上で様々な問題を再現させて、監視や復元性のテストを行うことが出来ます。
AWS FIS では定期的なアップデートによって、利用出来るアクションが増えていっていますが、先日のアップデートでディスクフィルアクションが追加されました。
これによって、特定の EC2 のディスク容量が不足した場合などのアプリケーションのパフォーマンスや回復性を確認することが出来るようになりました。
本日は基本的な使い方を確認しつつ、Amazon Linux 2023 上で実験を行って CloudWatch アラームが期待どおり動作しているか確認してみたいと思います。
AWS FIS のアクションタイプと SSM ドキュメントに AWSFIS-Run-Disk-Fill が追加された
FIS のアクションタイプを確認
今回のアップデートで次のように FIS の実験テンプレート作成時に「aws:ssm:send-command/AWSFIS-Run-Disk-Fill」が選択出来るようになりました。
カテゴリから推察出来ると思いますが、実態としては FIS を経由して SSM ドキュメントが実行され、EC2 上でディスク容量不足がシミュレートされるというものになっています。
ターゲットに指定するのは EC2 インスタンスです。
ここではリソース ID で直接指定していますが、通常どおりタグベースでの指定なども可能です。
実験テンプレート作成後、SSM ドキュメントを使うので SSM エージェント有効ですかーというメッセージが表示されています。
なお、このメッセージは有効でも表示されます。
SSM (AWS Systems Manager) ドキュメントを確認
今回のアップデートでは FIS のアクションが追加されていますが、そのアクションは実態としては SSM ドキュメントが実行されています。
そしてその SSM ドキュメントも今回のアップデートのタイミングで追加されたようです。
次の「AWSFIS-Run-Disk-Fill」です。
ドキュメント履歴を確認してみると、初版は 2023-04-27 に追加されていることが確認出来ます。
% aws ssm list-document-versions --name AWSFIS-Run-Disk-Fill { "DocumentVersions": [ { "Name": "AWSFIS-Run-Disk-Fill", "DocumentVersion": "6", "CreatedDate": "2023-05-18T23:12:19.968000+09:00", "IsDefaultVersion": true, "DocumentFormat": "YAML", "Status": "Active" }, { "Name": "AWSFIS-Run-Disk-Fill", "DocumentVersion": "5", "CreatedDate": "2023-05-18T22:59:51.517000+09:00", "IsDefaultVersion": false, "DocumentFormat": "YAML", "Status": "Active" }, { "Name": "AWSFIS-Run-Disk-Fill", "DocumentVersion": "4", "CreatedDate": "2023-05-18T22:12:41.547000+09:00", "IsDefaultVersion": false, "DocumentFormat": "YAML", "Status": "Active" }, { "Name": "AWSFIS-Run-Disk-Fill", "DocumentVersion": "3", "CreatedDate": "2023-05-18T09:23:27.258000+09:00", "IsDefaultVersion": false, "DocumentFormat": "YAML", "Status": "Active" }, { "Name": "AWSFIS-Run-Disk-Fill", "DocumentVersion": "2", "CreatedDate": "2023-05-18T07:08:54.067000+09:00", "IsDefaultVersion": false, "DocumentFormat": "YAML", "Status": "Active" }, { "Name": "AWSFIS-Run-Disk-Fill", "DocumentVersion": "1", "CreatedDate": "2023-04-27T23:39:15.916000+09:00", "IsDefaultVersion": false, "DocumentFormat": "YAML", "Status": "Active" } ] }
この記事では割愛しますが、SSM ドキュメントの中身を確認してみると、指定した容量を計算後に fallocate が使われていることがわかります。
Amazon Linux 2023 で試してみる
今回の SSM ドキュメントは Windows はサポート対象プラットフォームとなっていないようですが、Amazon Linux 2023 も対象になっていたので今回は Amazon Linux 2023 でディスク容量の監視設定を行い、FIS から実験を行った際に期待どおりアラームが動作するかを確認してみます。
上記のように EC2 インスタンスを作成します。
SSM が動作するように通信経路やインスタンスプロファイルに注意します。
CloudWatch エージェント
EC2 のディスク容量の監視は CloudWatch の標準メトリクスではサポートされていません。
そこで、対象の EC2 インスタンスに CloudWatch エージェントをインストールすることでディスクやメモリに関する追加のメトリクスにアクセスすることが出来るようになります。
Amazon Linux 2023 ですが、以下に従ってインストールします。
yum を dnf に置き換えただけです。SSM ドキュメントからのセットアップではなく、セッションマネージャーで手動でセットアップしています。
CloudWatch Logs 構成などは不要だったのでエージェント構成ファイルはデフォルトのままです。
[ec2-user@ip-172-31-39-74 bin]$ sudo dnf install amazon-cloudwatch-agent Last metadata expiration check: 0:52:11 ago on Fri May 19 01:00:45 2023. Dependencies resolved. ======================================================================================================================================================================================== Package Architecture Version Repository Size ======================================================================================================================================================================================== Installing: amazon-cloudwatch-agent x86_64 1.247358.0-1.amzn2023 amazonlinux 29 M Transaction Summary ======================================================================================================================================================================================== Install 1 Package Total download size: 29 M Installed size: 129 M Is this ok [y/N]: y Downloading Packages: amazon-cloudwatch-agent-1.247358.0-1.amzn2023.x86_64.rpm 41 MB/s | 29 MB 00:00 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Total 37 MB/s | 29 MB 00:00 Running transaction check Transaction check succeeded. Running transaction test Transaction test succeeded. Running transaction Preparing : 1/1 Running scriptlet: amazon-cloudwatch-agent-1.247358.0-1.amzn2023.x86_64 1/1 create group cwagent, result: 0 create user cwagent, result: 0 Installing : amazon-cloudwatch-agent-1.247358.0-1.amzn2023.x86_64 1/1 Running scriptlet: amazon-cloudwatch-agent-1.247358.0-1.amzn2023.x86_64 1/1 Verifying : amazon-cloudwatch-agent-1.247358.0-1.amzn2023.x86_64 1/1 Installed: amazon-cloudwatch-agent-1.247358.0-1.amzn2023.x86_64 Complete!
インストール出来たらエージェントを起動しておきます。
[ec2-user@ip-172-31-39-74 bin]$ sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s ****** processing amazon-cloudwatch-agent ****** I! Trying to detect region from ec2 D! [EC2] Found active network interface Successfully fetched the config and saved in /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/default.tmp Start configuration validation... 2023/05/19 01:55:08 Reading json config file path: /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/default.tmp ... 2023/05/19 01:55:08 I! Valid Json input schema. I! Detecting run_as_user... I! Trying to detect region from ec2 D! [EC2] Found active network interface No csm configuration found. No log configuration found. Configuration validation first phase succeeded /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent -schematest -config /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml Configuration validation second phase succeeded Configuration validation succeeded amazon-cloudwatch-agent has already been stopped Created symlink /etc/systemd/system/multi-user.target.wants/amazon-cloudwatch-agent.service → /etc/systemd/system/amazon-cloudwatch-agent.service.
CloudWatch アラーム設定
エージェントをインストール・起動するだけですが、次のように拡張したメトリクスが CloudWatch メトリクスとして取得出来ることが確認出来ました。
続いて CloudWatch アラームを作成します。
ここでは/
のdisk_used_percent
の 1 分間の平均値をターゲットにして、80 % を超えた場合にアラーム状態としたいと思います。
そこから色々な自動復旧アクションなども考えられますが、今回はシンプルに SNS トピックへ通知して E メールでメッセージを受信するだけにしたいと思います。
FIS アクションを実行
実験テンプレートでは先程のアクションを指定しつつ、SSM ドキュメントで定義されている必須パラメータDurationSeconds
とオプションパラメータのPercent
を指定しています。
実験を開始しました。後は待つだけです。
数分後、次のような E メールを受信しました。
CloudWatch アラームの詳細情報を確認してみると、静的閾値を超えて期待どおり設定したアクションを実行してくれていることが確認出来ました。
さいごに
本日は AWS FIS でディスク容量不足を発生させることが出来るようになったので使ってみました。
Amazon Linux 2023 でも期待どおり機能していることが確認出来ましたね。
以前に EBS の I/O 停止アクションが利用出来るようになり、そちらは完全に EBS へ組み込まれているアクションでしたが、今回は SSM ドキュメントタイプのものでしたね。
なお、公式アナウンスによると FIS が使用する SSM ドキュメントは全て Amazon Linux 2023 にも対応したそうなので、Amazon Linux 2023 でも AWS FIS を利用出来ますね。